package com.ttit.core.handler;

import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.view.View;
import android.widget.TextView;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import com.ttit.helloworld.R;

import java.util.Timer;
import java.util.TimerTask;

public class ThreadHandlerActivity extends AppCompatActivity {
    private int num = 0;
    private int i = 0;
    private TextView tv;
    private WorkThread workThread;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.handler_layout);
        tv = findViewById(R.id.tv_content);
        findViewById(R.id.btn_send).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                i++;
                //Timer()设置30分钟左右的任务还是能够准确触发。 所以结论是如果长时间的定时任务还是交给AlarmManager来完成
                new Timer().schedule(new TimerTask() {
                    @Override
                    public void run() {

                        workThread.mHandler.sendEmptyMessage(0);
                    }
                }, 0, 1000);
            }
        });
        // 启动新线程
        workThread = new WorkThread();
        workThread.start();


          /*      Timer timer = Timer( true );
        // 注意，javax.swing包中也有一个Timer类，如果import中用到swing包,要注意名字的冲突。

                TimerTask task =  new  TimerTask() {
                    public  void  run() {
                 ...  //每次需要执行的代码放到这里面。
                    }
                };

        //以下是几种常用调度task的方法：

                timer.schedule(task, time);
        // time为Date类型：在指定时间执行一次。

                timer.schedule(task, firstTime, period);
        // firstTime为Date类型,period为long
        // 从firstTime时刻开始，每隔period毫秒执行一次。

                timer.schedule(task, delay)
        // delay 为long类型：从现在起过delay毫秒执行一次

                timer.schedule(task, delay, period)
        // delay为long,period为long：从现在起过delay毫秒以后，每隔period
        // 毫秒执行一次。*/
    }

    class WorkThread extends Thread {
        public Handler mHandler;

        public void run() {
            Looper.prepare();
            mHandler = new Handler() {
                // 定义处理消息的方法
                @Override
                public void handleMessage(Message msg) {
                    if (msg.what == 0) {
                        num++;
                        ThreadHandlerActivity.this.runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                tv.setText("点击"+i+"数据"+String.valueOf(num));

                            }
                        });
                    }
                }
            };
            Looper.loop();
        }
    }
}
